package com.vhly.classfile.util;

import com.vhly.classfile.CPClass;
import com.vhly.classfile.CPUtf8;
import com.vhly.classfile.ConstantPool;

/**
 * Created by IntelliJ IDEA.
 * User: vhly
 * Date: 2009-10-29
 * Time: 10:42:14
 *
 * @author vhly[FR]
 */
public final class CPTool {
    /**
     * 查找或者是添加相应的内容
     *
     * @param cp  常数池
     * @param str 字符串内容
     * @return 位置索引
     */
    public static int addUTF8(ConstantPool cp, String str) {
        int ret = 0;
        CPUtf8 cpUtf8 = new CPUtf8(str);
        ret = cp.indexOf(cpUtf8);
        if (ret <= 0) {
            ret = cp.addCPEntry(cpUtf8);
        }
        return ret;
    }

    public static int addClass(ConstantPool cp, String clsName) {
        // 使用这种方式，可以满足 唯一性，即如果已经存在 class 了，那么也不会创建
        int uindex = addUTF8(cp, clsName);
        CPClass cpc = new CPClass(uindex);
        int ret = cp.indexOf(cpc); // 查找是否已经存在
        if (ret <= 0) {  // 不存在，添加
            ret = cp.addCPEntry(cpc);
        }else{ // 存在，直接返回相应的索引
            cpc = null;
        }
        return ret;
    }
}
